公開方法沒有任何存取限制,可以被該類別或是子層類別的實體呼叫。
一般而言當你定義一個方法後,這個方法就會是公開方法。
或是也可以在方法外的上方加一個 public,public 以下的都會是公開方法,且不用加 end 作區隔,不過通常不會這樣寫。
範例:
class Drama
public
def korea
puts "魷魚遊戲"
end
def japan
puts "今際之國"
end
end
class Perfect < Drama
end
number456 = Drama.new
number456.korea
pokers = Perfect.new
pokers.japan
上述範例定義一個 Perfect 類別繼承自 Drama,兩個類別創造出來的實體都可以呼叫 Drama 內的公開方法。
執行完後會印出魷魚遊戲以及今際之國。
私有方法是為了要保護功能,防止外部直接存取並使用他,私有方法有兩個限制:
範例:
class Drama
def korea
puts "魷魚遊戲"
end
def japan
puts "今際之國"
end
private
def america
puts "后翼棄兵"
end
end
beth = Drama.new
beth.america
上述範例會噴出錯誤訊息:
private method 'america' called for #<Perfect:0x00005637c2aa8020> (NoMethodError)
如果想要呼叫私有方法的話要把他放在公開方法內才行:
範例:
class Drama
def korea
puts "魷魚遊戲"
end
def japan
puts "今際之國"
end
def good
america
end
private
def america
puts "后翼棄兵"
end
end
lastyear = Drama.new
lastyear.good
上述範例可成功印出后翼棄兵
puts 本身在整個環境內是一個私有方法,也可使用 self.puts 印出東西。
跟 private 一樣功用,也不能在外面直接呼叫他,但可以有明確的 receiver。
參考:
[1]Public, Protected and Private Method in Ruby
[2]Ruby Access Control Basics: Public vs Private vs Protected methods